home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Original Shareware 1.1
/
The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso
/
32
/
life.zip
/
LIFE.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1987-09-01
|
3KB
|
134 lines
PROGRAM LIFE(INPUT,OUTPUT);
(*LIFE FORM CREATION PROGRAM*)
(*Code written by Joseph Velasco, August 23, 1987*)
(*Purpose of this program is mainly to aquaint the beginner with Pascal
Code.
You may freely distribute and even alter this program at will,
provided proper credit is given.
Files: LIFE.PAS --> This program.
LIFE.DOC --> Brief description and instructions.
LIFE.EXE --> Compiled PASCAL program.*)
CONST
NUM = 15;
TYPE
RANGE = 0..NUM;
ZO = 0..1;
VAR
LO,L1 : ARRAY[RANGE,RANGE] OF ZO;
X,Y,R,S,TURN,NADJ : INTEGER;
SURV : BOOLEAN;
ADJ : ZO;
QUIT : BOOLEAN;
Q : CHAR;
PROCEDURE GOTOXY(X1,Y1:INTEGER);
VAR SX,SY:INTEGER;
BEGIN
WRITELN(CHR(11));
FOR SY:= 1 TO Y1 DO
WRITELN(CHR(31));
FOR SX := 1 TO X1 DO
WRITELN(CHR(28));
END;
PROCEDURE HOME;
VAR I : INTEGER;
BEGIN
FOR I := 1 TO 26 DO
WRITELN;
GOTOXY(0,2);
END;
PROCEDURE INITIALIZE;
VAR DATAOK : BOOLEAN;
BEGIN
HOME;
SURV := TRUE;
TURN := 1;
FOR Y := 1 TO NUM DO
FOR X := 1 TO NUM DO
BEGIN
L1[X,Y] := 0;
LO[X,Y] := 0;
END;
WRITELN(' **LIFE**');
WRITELN(' THE GAME OF EVOLUTIONARY STUDY');
WRITELN(' WILL YOUR ORGANISM FLURISH?');
WRITELN;
WRITE('NUMBER OF INITIAL CELLS IN ORGANISM? ');
READLN(R);
FOR S := 1 TO R DO
BEGIN
DATAOK := FALSE;
REPEAT
WRITE('PLEASE ENTER THE X <SPACE> Y COORDS. OF THE CELL ',S,': ');
READLN(X,Y);
DATAOK := ((Y>0) AND (Y<NUM)) AND ((X>0) AND (X<NUM));
UNTIL DATAOK;
LO[X,Y] := 1;
END;
HOME;
GOTOXY(40,8);
WRITELN('THE GREAT GAME: *LIFE*');
END;
PROCEDURE COMPUTE;
BEGIN
SURV := FALSE;
FOR Y := 1 TO NUM DO
FOR X := 1 TO NUM DO
BEGIN
NADJ := 0;
FOR R:= -1 TO 1 DO
FOR S := -1 TO 1 DO
BEGIN
IF (R<>0) OR (S<>0) THEN
IF (X<>1) AND (X<>NUM) AND (Y<>1) AND (Y<>NUM) THEN
NADJ := NADJ + LO[X+R,Y+S];
END;
IF NADJ = 3 THEN L1[X,Y] := 1
ELSE IF NADJ <> 2 THEN L1[X,Y] := 0;
IF NOT SURV THEN SURV := (L1[X,Y]=1);
END;
FOR Y := 1 TO NUM DO
FOR X := 1 TO NUM DO
LO[X,Y] := L1[X,Y];
TURN := TURN + 1;
END;
PROCEDURE CONSOLE;
BEGIN
IF TURN > 8 THEN WRITELN('YOUR ORGANISM WAS STRONG, BUT ITS DEAD NOW.')
ELSE CASE TURN OF
1,2 : WRITELN('LIFE FORM DEAD. STICK TO PLAYING WITH LEGO BLOCKS!');
3,4 : WRITELN('LIFE FORM DEAD. YOU HAVE ONLY YOURSELF TO BLAME.');
5 : WRITELN('YOU GAVE IT A GOOD SHOT, BUT TAPS IS ITS FINAL SONG.');
6,7,8 : WRITELN('YOUR CREATION LINGERED FOR QUITE SOME TIME BEFORE IT',
' KICKED THE BUCKET. GOOD SHOW.');
END;(*OF CASE*)
WRITELN('YOUR ORGANISM LASTED ',(TURN-1),' GENERATIONS.');
WRITELN;
END;
PROCEDURE DISPLAY;
BEGIN
GOTOXY(0,2);
FOR Y := 1 TO NUM DO
BEGIN
FOR X := 1 TO NUM DO
IF LO[X,Y] = 1 THEN WRITE('0')
ELSE WRITE('.');
WRITELN;
END;
WRITELN;WRITELN;WRITELN('GENERATION ',TURN);
END;
BEGIN (*MAIN PROGRAM*)
REPEAT
INITIALIZE;
WHILE SURV DO
BEGIN
DISPLAY;
COMPUTE;
END;
CONSOLE;
WRITE('TRY AGAIN? ');
READ(Q);
QUIT := (Q='N') OR (Q='n');
UNTIL QUIT;
END. (*MAIN PROGRAM*)